/**
 * 文件名：SerialListener.java
 *
 * 创建人：Elvin Zhao - 279152260@qq.com
 *
 * 创建时间：2018年7月10日 下午4:52:14
 *
 * 版权所有：FNII
 */
package com.springvision.test;

import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;

/**
 * [描述信息：说明类的基本功能]
 *
 * @author Elvin Zhao - 279152260@qq.com
 * @version 1.0 Created on 2018年7月10日 下午4:52:14
 */
public class SerialListener implements SerialPortEventListener {

	private SerialPort serialPort = null;

	/**
	 * 处理监控到的串口事件
	 */
	public void serialEvent(SerialPortEvent serialPortEvent) {
		System.err.println("Serial Port Event Type:" + serialPortEvent.getEventType());
		switch (serialPortEvent.getEventType()) {

			case SerialPortEvent.BI: // 10 通讯中断
				break;
			case SerialPortEvent.OE: // 7 溢位（溢出）错误
			case SerialPortEvent.FE: // 9 帧错误
			case SerialPortEvent.PE: // 8 奇偶校验错误
			case SerialPortEvent.CD: // 6 载波检测
			case SerialPortEvent.CTS: // 3 清除待发送数据
			case SerialPortEvent.DSR: // 4 待发送数据准备好了
			case SerialPortEvent.RI: // 5 振铃指示
			case SerialPortEvent.OUTPUT_BUFFER_EMPTY: // 2 输出缓冲区已清空
				break;
			case SerialPortEvent.DATA_AVAILABLE: // 1 串口存在可用数据

				System.out.println("found data");
				byte[] data = null;

				try {
					data = SerialTool.readFromPort(serialPort);
				} catch (ReadDataFromSerialPortFailure e1) {
					e1.printStackTrace();
				} catch (SerialPortInputStreamCloseFailure e1) {
					e1.printStackTrace();
				} // 读取数据，存入字节数组
				System.out.println(new String(data));

				// 自定义解析过程，你在实际使用过程中可以按照自己的需求在接收到数据后对数据进行解析
				if (data == null || data.length < 1) { // 检查数据是否读取正确
				} else {
					String dataOriginal = new String(data); // 将字节数组数据转换位为保存了原始数据的字符串
					String dataValid = ""; // 有效数据（用来保存原始数据字符串去除最开头*号以后的字符串）
					String[] elements = null; // 用来保存按空格拆分原始字符串后得到的字符串数组
					// 解析数据
					if (dataOriginal.charAt(0) == '*') { // 当数据的第一个字符是*号时表示数据接收完成，开始解析
						dataValid = dataOriginal.substring(1);
						elements = dataValid.split(" ");
						if (elements == null || elements.length < 1) { // 检查数据是否解析正确
						} else {
							try {

							} catch (ArrayIndexOutOfBoundsException e) {

							}
						}
					}
				}
				break;
		}

	}

	/**
	 * 
	 */
	public SerialListener() {
		super();
	}

	public SerialListener(SerialPort serialPort) {
		this.serialPort = serialPort;
	}

}